import axios from 'axios'
import { Message, MessageBox } from 'element-ui'
import store from '../store'
import { getToken } from '../utils/CookiesToken'

const request = axios.create({
  baseURL:"/api",
  timeout: 5000,
  headers:{
    'Content-Type': 'application/json;charset=utf-8'
  }
})

// request 拦截器
// 可以自请求发送前对请求做一些处理
// 比如统一加token，对请求参数统一加密
request.interceptors.request.use(config => {
  if (store.getters.token){
    config.headers['Authorization'] = 'Bearer ' + getToken();  // 设置请求头
  }

  // alert("config:" + JSON.stringify(config))

  return config
}, error => {
  return Promise.reject(error)
});

// response 拦截器
// 可以在接口响应后统一处理结果
request.interceptors.response.use(
    response => {
      let res = response.data;
      const {code,data,msg} = res

      // alert("res:" + JSON.stringify(res))
      if (code != '0'){
        //50008 非法token ；50012 ：异地登录 ；50014：token失效
        //    重新登录
        if (code === '401' || code === '50012' || code === '50014'){
          MessageBox.confirm('会话失效，您可以留在当前页面，或重新登录','权限不足',{
            confirmButtonText:'确定',
            cancelButtonText:'取消',
            type:'warning',
            center:true
          }).then(()=>{
            window.location.href = '#/login'
          })
        }else {//其他异常直接提示
          Message({
            showClose:true,
            message:'❗' + msg || 'error',
            type:'error',
            duration:3 * 1000

          })
          return res

        }

        return Promise.reject(new Error(msg || 'Error'))
      }else {
        return res
      }

    },
    error => {
      Message({
        showClose:true,
        message:error.message,
        type:'error',
        duration:5 * 1000

      })
      return Promise.reject(error)

    }
)


export default request
